package com.gzp.util.pageutil;

import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.PageUtil;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;

/**
 * @author: guanzepeng
 * @Date: 2021/9/6 14:26 星期一
 * @Description: 封装分页的数据
 * (构造时需要传入的参数为: lists, pageSize, rows, pageNo)
 * lists : 需要显示的实体类数据 (就是PageUtils构建出来的List集合)
 * pageSize : 每页多少条数据
 * rows : 总行数 (就是原始实体类数据的size 没有构建前的)
 * pageNo : 当前页码数
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBeans<T> {
	// 存放  需要显示的实体类数据
	private List<T> lists;
	// 总页数
	private int totalPage;
	// 当前页码数（默认给1）
	private Integer pageNo = 1;
	// 每页多少条数据
	private Integer pageSize;
	// 总行数
	private Integer rows = 0;
	// 前一页页数
	private Integer prePageNo;
	// 下一页页数
	private Integer nextPageNo;

	//求出总行数
	public int getTotalPage() {
		if (rows == 0) {
			totalPage = 0;
		} else {
			totalPage = PageUtil.totalPage(rows, pageSize);
		}
		return totalPage;
	}

	//判定当前页码数是否合理
	public Integer getPageNo() {
		//如果传入的页码为空 或者小于0  就默认给 1 (以及处理前一页和下一页的页数)
		if (ObjectUtil.isNull(pageNo) || pageNo <= 0) {
			pageNo = 1;
			prePageNo = 1;
			nextPageNo = 2;
		}
		//如果当前页码数>总页码数    就让 当前页码数 等于 最大页码数
		else if (pageNo > this.totalPage && this.totalPage > 0) {
			pageNo = totalPage;
			nextPageNo = totalPage;
			prePageNo = Math.max(pageNo - 1, 1);
		}
		//都符合条件 就让 当前页码数 等于 传入的页码数
		else {
			if (pageNo == totalPage) {
				nextPageNo = totalPage;
			} else {
				nextPageNo = pageNo + 1;
			}
			prePageNo = Math.max(pageNo - 1, 1);
		}
		return pageNo;
	}
}
